#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int get_lower(LL x, int p) { // 求某个因数的次数
  int ans = 0;               // 贫穷限制了我的想象力
  while (x % p == 0) {
    x /= p;
    ans++;
  }
  return ans;
}

LL a[200 + 5]; // 不要忘了开大一点哦
LL dp[2][200 + 5][6000];
// 前i位已经选出了j个数，为k所代表的因数5的个数

int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++)
    scanf("%lld", &a[i]);
  memset(dp, -1, sizeof(dp)); // 这个是老习惯
  dp[0][0][0] = 0;            // 不要忘了初始情况
  int cur = 0;                // 状压
  LL sum = 0;
  for (int i = 1; i <= n; i++) {
    int sum_two = get_lower(a[i], 2);  // 计算质因数2的出现次数
    int sum_five = get_lower(a[i], 5); // 同上
    cur ^= 1;
    sum += sum_two;                          // 计算总次数
    for (int j = 0; j <= k && j <= i; j++) { // 因为是取出i个数
      for (int x = 0; x <= sum; x++) {
        dp[cur][j][x] = max(dp[cur ^ 1][j][x], dp[cur][j][x]);
        // 决策一：考虑当前数是否有贡献
        if (j >= 1 && dp[cur ^ 1][j - 1][x - sum_two] >= 0 &&
            x - sum_two >= 0) {
          dp[cur][j][x] =
              max(dp[cur ^ 1][j - 1][x - sum_two] + sum_five, dp[cur][j][x]);
        }
        // 决策二：考虑取出当前数是否对当前产生最大贡献
      }
    }
  }
  LL ans = 0;
  for (LL i = 0; i <= sum; i++) {
    ans = max(ans, min(i, dp[cur][k][i]));
    // 乘下来0的个数由2质因子和5质因子的数量来决定
  }
  printf("%lld", ans); // 输出结果
  return 0;
}
